/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package fase2.pt.iul.sid.controller;

import fase2.pt.iul.sid.database.ComentarioAoEstabelecimentoDAO;
import fase2.pt.iul.sid.database.ComentarioAoPratoDAO;
import fase2.pt.iul.sid.database.EstabelecimentoDAO;
import fase2.pt.iul.sid.database.FactoryConnection;
import fase2.pt.iul.sid.database.PratoDAO;
import fase2.pt.iul.sid.database.UtilizadorDAO;
import fase2.pt.iul.sid.model.ComentarioAoEstabelecimentoModel;
import fase2.pt.iul.sid.model.ComentarioAoPratoModel;
import fase2.pt.iul.sid.model.EstabelecimentoModel;
import fase2.pt.iul.sid.model.PratoModel;
import fase2.pt.iul.sid.model.UtilizadorModel;
import fase2.pt.iul.sid.view.Comentario;
import fase2.pt.iul.sid.view.Comentarios;
import fase2.pt.iul.sid.view.Pesquisa;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

/**
 *
 * @author Ricardo Marques
 */
public class ComentarioController {
    
    private FactoryConnection fc = null;
    private Comentario comentarioView = null;
    private Pesquisa pesquisaView = null;
    private Comentarios comentariosView = null;
    private String email_user_logon = null;
    private int idPrato = 0;
    private int idEstabelecimento = 0;
    
    public ComentarioController(FactoryConnection fc, Pesquisa pesquisaView, Comentarios comentariosView){
        this.fc = fc;
        this.pesquisaView = pesquisaView;
        this.comentariosView = comentariosView;
    }
    
    public void criarComentarioPrato(int id_prato, int id_estabelecimento, String email_utilizador_cria_comentario){
        
        email_user_logon = email_utilizador_cria_comentario;
        idEstabelecimento = id_estabelecimento;
        idPrato = id_prato;
        
        UtilizadorDAO u = new UtilizadorDAO(fc);
        UtilizadorModel user = u.getDadosUtilizador(email_utilizador_cria_comentario);
        
        EstabelecimentoDAO e = new EstabelecimentoDAO(fc);
        EstabelecimentoModel estabelecimento = e.getEstabelecimento(id_estabelecimento);
        
        PratoDAO p = new PratoDAO(fc);
        PratoModel prato = p.getPrato(id_prato);
        
        comentarioView = new Comentario();
        comentarioView.addBtnActionLister(new ListnerBtnsCriar());
        
        comentarioView.comentarPrato(prato, estabelecimento, user);
        
    }
    
    public void criarComentarioEstabelecimento(int id_estabelecimento, String email_utilizador_cria_comentario){
        
        email_user_logon = email_utilizador_cria_comentario;
        idEstabelecimento = id_estabelecimento;
        
        UtilizadorDAO u = new UtilizadorDAO(fc);
        UtilizadorModel user = u.getDadosUtilizador(email_utilizador_cria_comentario);
        
        EstabelecimentoDAO e = new EstabelecimentoDAO(fc);
        EstabelecimentoModel estabelecimento = e.getEstabelecimento(id_estabelecimento);
        
        comentarioView = new Comentario();
        comentarioView.addBtnActionLister(new ListnerBtnsCriar());
        
        comentarioView.comentarEstabelecimento(estabelecimento, user);

    }
    
    public void verComentarioEstabelecimento(int id_estabelecimento, String email_utilizador_realiza_pedido, String email_utilizador_criou_comentario){
        
        email_user_logon = email_utilizador_realiza_pedido;
        idEstabelecimento = id_estabelecimento;
        comentarioView = new Comentario();
        comentarioView.addBtnActionLister(new ListnerBtns());
        
        ComentarioAoEstabelecimentoDAO ce = new ComentarioAoEstabelecimentoDAO(fc);
        
        ComentarioAoEstabelecimentoModel ret = ce.getComentarioEstabelecimento(id_estabelecimento, email_utilizador_criou_comentario);
        
        if(ret != null){

            UtilizadorDAO u = new UtilizadorDAO(fc);
            UtilizadorModel userCriouComentario = u.getDadosUtilizador(email_utilizador_criou_comentario);
            
            boolean PodeManipular = false;
            
            if(email_utilizador_realiza_pedido.equals(email_utilizador_criou_comentario)){
                PodeManipular = true;
            }
            
            comentarioView.verComentarioEstabelecimento(userCriouComentario, ret, PodeManipular);
            
        }
  
    }
    
    public void verComentarioPrato(int id_prato,int id_estabelecimento, String email_utilizador_realiza_pedido, String email_utilizador_criou_comentario){
        
        email_user_logon = email_utilizador_realiza_pedido;
        idEstabelecimento = id_estabelecimento;
        idPrato = id_prato;
        comentarioView = new Comentario();
        comentarioView.addBtnActionLister(new ListnerBtns());
        
        ComentarioAoPratoDAO cp = new ComentarioAoPratoDAO(fc);
        
        ComentarioAoPratoModel ret = cp.getComentarioPrato(id_prato, email_utilizador_criou_comentario);
        
        if(ret != null){
            
            UtilizadorDAO u = new UtilizadorDAO(fc);
            UtilizadorModel userCriouComentario = u.getDadosUtilizador(email_utilizador_criou_comentario);
            
            boolean PodeManipular = podeManipularComentario(email_utilizador_realiza_pedido, email_utilizador_criou_comentario, false);


            comentarioView.verComentarioPrato(userCriouComentario, ret, PodeManipular);
        }
    }
    
    public boolean enviarComentario(String comentario, int nota){
        
        boolean ret= false;
        
        if(idPrato==0){
            
            ComentarioAoEstabelecimentoDAO c = new ComentarioAoEstabelecimentoDAO(fc);
            ret = c.inserirComentarioAoEstabelicimento(idEstabelecimento, email_user_logon, comentario, nota);
        
        }else if(idPrato!=0){
            
            ComentarioAoPratoDAO c = new ComentarioAoPratoDAO(fc);
            ret = c.inserirComentarioAoPrato(idPrato, email_user_logon, comentario, nota);
            
        }

        if(ret){
            comentarioView.msgbox("Adicionado com sucesso");
        }else{
            comentarioView.msgbox("Não foi possivel realizar a operação");
        }
        
        return ret;
        
    }
    
    public boolean apagarComentario(){
        
        boolean ret= false;

        if(idPrato == 0 && idEstabelecimento != 0){
            ComentarioAoEstabelecimentoDAO ce = new ComentarioAoEstabelecimentoDAO(fc);
            ret = ce.apagarComentarioAoEstabelecimento(idEstabelecimento, email_user_logon);
        }else if(idPrato != 0 && idEstabelecimento != 0){
            ComentarioAoPratoDAO ce = new ComentarioAoPratoDAO(fc);
            ret = ce.apagarComentarioAoPrato(idPrato, email_user_logon);
        }
        
        if(ret){
            comentarioView.msgbox("Apagado com sucesso");
            if(pesquisaView!=null){
                pesquisaView.getModel().removeRow(pesquisaView.getjTable1().getSelectedRow());
            }else if(comentariosView!=null){
                comentariosView.getModel().removeRow(comentariosView.getjTable1().getSelectedRow());
            }
        }else{
            comentarioView.msgbox("Não foi possivel realizar a operação");
        }
        
        return ret;
        
    }
    
    public boolean alterarComentario(String comentario, int nota){
        
        boolean ret= false;
        
        if(idPrato == 0 && idEstabelecimento != 0){
            ComentarioAoEstabelecimentoDAO ce = new ComentarioAoEstabelecimentoDAO(fc);
            ret = ce.alterarComentarioAoEstabelecimento(idEstabelecimento,email_user_logon,comentario,nota);
        }else if(idPrato != 0 && idEstabelecimento != 0){
            ComentarioAoPratoDAO ce = new ComentarioAoPratoDAO(fc);
            ret = ce.alterarComentarioAoPrato(idPrato,email_user_logon,comentario,nota);
        }
        
        if(ret){
            comentarioView.msgbox("Alterado com sucesso");
            //Actualizar dados na tabela
            if(pesquisaView!=null){
                pesquisaView.getModel().setValueAt(comentario,pesquisaView.getjTable1().getSelectedRow(),5);
                pesquisaView.getModel().setValueAt(nota,pesquisaView.getjTable1().getSelectedRow(),4);
            }else if(comentariosView!=null){
                comentariosView.getModel().setValueAt(comentario,comentariosView.getjTable1().getSelectedRow(),0);
            }
        }else{
            comentarioView.msgbox("Não foi possivel realizar a operação");
        }
        
        return ret;
        
    }
    
    public boolean podeManipularComentario(String utilizador_realiza_pedido, String utilizador_autor_comentario, boolean is_admin){
        
        boolean ret= false;
        
        if(utilizador_realiza_pedido.equals(utilizador_autor_comentario) || is_admin){
            ret = true;
        }
        
        return ret;
        
    }
    
    public void sair(){
        comentarioView.dispose();
    }
    
    class ListnerBtns implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource() == comentarioView.getjButton1()) {
                
                alterarComentario(comentarioView.getjTextArea1().getText(),comentarioView.getjComboBox1().getSelectedIndex());
                comentarioView.dispose();
                
            }
            else if(e.getSource() == comentarioView.getjButton2()){
                
                sair();
                
            }
            else if(e.getSource() == comentarioView.getjButton3()){
                
                apagarComentario();
                comentarioView.dispose();
                
            }
            else{ 
                
            }
        }
        
    }
    
    class ListnerBtnsCriar implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource() == comentarioView.getjButton1()) {
                
                enviarComentario(comentarioView.getjTextArea1().getText(),comentarioView.getjComboBox1().getSelectedIndex());
                comentarioView.dispose();
                
            }
            else if(e.getSource() == comentarioView.getjButton2()){
                
                sair();
                
            }
            else if(e.getSource() == comentarioView.getjButton3()){
                
                
                
            }
            else{ 
                
            }
        }
        
    }
     
}
